#include <iostream>
#include <signal.h>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
using namespace std;

int cnt = 0;

void catchSig(int signo)
{
    alarm(1);
    cout<<cnt<<endl;
    // cout<<"获取一个信号，信号编号是："<<signo<<endl;
}

static void Usage(const string &proc)
{
    cout<<"\nUsage:"<<proc<<"pid signo\n"<<endl;
}
// ./myprocess pid signo
int main(int argc,char *argv[])
{
     signal(SIGALRM,catchSig);
    //4、通过软件条件
    alarm(1);
   
    while(true)
    {
        cnt++;
    }
    
    //3、第三种产生信号的方式：硬件异常产生信号
    //信号产生不一定由用户显示发送。
    //也可以由操作系统自动发送
    // signal(SIGSEGV,catchSig);
    
    // while(true)
    // {
    //     cout<<"我正在运行中 ..."<<endl;
    //     sleep(1);
    //     // int a = 10;
    //     // a/=0;
    //     int *p=nullptr;
    //     *p = 100;
    // }

    // //2、通过系统调用发信号
    // //kill()
    // //raise()
    // //abort()
    // int cnt = 0;
    // while(cnt <= 10)
    // {
    //     printf("cnt:%d\n",cnt++);
    //     sleep(1);
    //     //if(cnt>=5)raise(9);
    //     if(cnt>=5)abort();
    // }
    // if(argc != 3)
    // {
    //     Usage(argv[0]);
    //     exit(1);
    // }
    // pid_t pid = atoi(argv[1]);
    // int signo = atoi(argv[2]);
    // int n = kill(pid, signo);
    // if(n != 0)
    // {
    //     perror("kill");
    // }
    
    
    // //1、通过键盘发信号
    // while(true)
    // {
    //     cout<<"hello world"<<endl;
    //     sleep(1);
    // }
    return 0;
}